home *** CD-ROM | disk | FTP | other *** search
/ 3D GFX / 3D GFX.iso / amiutils / e_h / gfx2grob / src / getopts.c < prev    next >
C/C++ Source or Header  |  1995-12-30  |  2KB  |  110 lines

  1. /**************************************************************************
  2.  
  3.                Scan & check options
  4.  
  5.        Copyright (C) 1994 by Alexandros Loghis,  All Rights Reserved
  6.  
  7. **************************************************************************/
  8.  
  9. #include <ctype.h>    /* toupper */
  10. #include <string.h>    /* strcmp, strchr */
  11. #include <stdlib.h>    /* atoi */
  12.  
  13. #include "gfx2grob.h"
  14. #include "PrintMsg.h"
  15. #include "GetOpts.h"
  16.  
  17.  
  18. #ifdef AMIGA
  19. #define ARGMAXNUMBER    4    /* Inputfile, Outputfile -a | -b | -i */
  20. #else
  21. #define ARGMAXNUMBER    3    /* Inputfile, Outputfile -a | -b */
  22. #endif
  23.  
  24. static boolean TestHelpOption(char *Arg1);
  25.  
  26. /*************************************************************************/
  27.  
  28. static boolean TestHelpOption(char *Arg1)
  29. {
  30.   char **p;
  31.  
  32.   static char *HelpOptions[] = {  "?",    "h",  "H",
  33.                  "-?", "-h", "-H",
  34.                  "/?", "/h", "/H",
  35.                  NULL
  36.                    };
  37.  
  38.  
  39.   for (p = HelpOptions; *p; p++)
  40.     if (!strcmp(Arg1, *p)) return (TRUE);
  41.  
  42.   return (FALSE);
  43. }
  44.  
  45. /*************************************************************************/
  46.  
  47. extern void GetOptions(int ArgC, char *ArgV[], OptionsType *Options)
  48. {
  49.   u_char i;
  50.  
  51.   char *pChar;
  52.  
  53.   boolean Error = FALSE;
  54.  
  55.  
  56.   if ((ArgC == 1) || (ArgC > ARGMAXNUMBER + 1))
  57.     PrintMsg(MSG_USAGE_S, ArgV[0]);
  58.   if ((ArgC == 2) && TestHelpOption(ArgV[1])) PrintMsg(MSG_HELP);
  59.  
  60.   for (i = 1; i < ArgC; i++) {
  61.     if (ArgV[i][0] == '-')            /* get arguments */
  62.       switch (toupper(ArgV[i][1])) {
  63.  
  64.     case 'G' :
  65.       if (Options->Option == OT_NOONE) {
  66.         Options->Option = OT_TOASCII;
  67.         if (ArgV[i][2])
  68.           if (pChar = strchr(&ArgV[i][2], 'x')) {
  69.         *pChar++ = '\0';
  70.         Options->Width   = atoi(&ArgV[i][2]);
  71.         Options->Height  = atoi(pChar);
  72.           }
  73.           else
  74.         Error = TRUE;
  75.       }
  76.       else
  77.         Error = TRUE;
  78.     break;
  79.  
  80.     case 'R' :
  81.       if (Options->Option == OT_NOONE)
  82.         Options->Option = OT_TOBIN;
  83.       else
  84.         Error = TRUE;
  85.     break;
  86.  
  87. #ifdef AMIGA
  88.     case 'I' :
  89.       if (Options->Option == OT_NOONE)
  90.         Options->Option = OT_TOIFF;
  91.       else
  92.         Error = TRUE;
  93.     break;
  94. #endif
  95.  
  96.     default :
  97.         Error = TRUE;
  98.     break;
  99.       }
  100.     else if (!*Options->InputfileName)
  101.        Options->InputfileName = ArgV[i];
  102.      else if (!*Options->OutputfileName)
  103.         Options->OutputfileName = ArgV[i];
  104.           else
  105.         Error = TRUE;
  106.   }
  107.   if (Error || !*Options->InputfileName || Options->Option == OT_NOONE)
  108.     PrintMsg(MSG_USAGE_S, ArgV[0]);
  109. }
  110.